package com.vcms.cms.service;

import java.util.Collection;

import com.vcms.common.util.PageBean;


public interface BasicService<T> {

	/**
	 * 增加数据
	 * 
	 * @param transientInstance
	 *            :对象
	 */
	public void save(T transientInstance);

	/**
	 * 更新数据
	 * 
	 * @param transientInstance
	 *            :对象
	 */
	public void update(T transientInstance);

	/**
	 * 删除数据（通过id）
	 * 
	 * @param id
	 *            要删除的数据的ID
	 * @return （1：删除成功，0：删除失败）
	 */
	public void delete(int id);

	/**
	 * 删除数据（通过对象）
	 * 
	 * @param transientInstance
	 *            要删除的对象
	 * @return
	 */
	public void delete(T transientInstance);

	/**
	 * 增加或更新
	 * 
	 * @param transientInstance
	 *            对象
	 */
	public void saveOrUpdate(T transientInstance);

	/**
	 * 通过ID查找
	 * 
	 * @param id
	 * @return 查找的对象
	 */
	public T findById(Integer id);

	/**
	 * 查找unique属性的实体
	 * 
	 * @param propertyName
	 *            属性名称
	 * @param value
	 *            属性值
	 * @return 查找的对象
	 */
	public T findByUniqueProperty(String propertyName, Object value);

	/**
	 * 通过属性查找
	 * 
	 * @param propertyName
	 *            属性名称
	 * @param value
	 *            属性值
	 * @return 查找的对象
	 */
	public Collection<T> findByProperty(String propertyName, Object value);

	/**
	 * 根据属性名进行模糊搜索
	 * 
	 * @param propertyName
	 * @param value
	 * @return
	 */
	public Collection<T> searchByProperty(String propertyName, Object value);

	/**
	 * 查找全部
	 * 
	 * @return
	 */
	public Collection<T> findAll();

	/**
	 * 获取该表总记录数
	 * 
	 * @return
	 */
	public long getAmount();

	/**
	 * 获取符合选择条件的总记录数
	 * 
	 * @param propertyName
	 *            属性名称
	 * @param value
	 *            属性值
	 */

	public long getAmount(String propertyName, Object value);

	/**
	 * 分页查找
	 * 
	 * @param pageBean
	 * @return
	 */
	public Collection<T> findByPage(PageBean pageBean);

	/**
	 * 分页查找并排序(increase为true升序，false降序)
	 * 
	 * @param increase
	 * @param orderpropertyName
	 * @param pageBean
	 * @return
	 */
	public Collection<T> findByPage(Boolean increase, String orderpropertyName,
			PageBean pageBean);

	/**
	 * 按属性分页查找
	 * 
	 * @param propertyName
	 * @param value
	 * @param pageBean
	 * @return
	 */
	public Collection<T> findByPage(String propertyName, Object value,
			PageBean pageBean);

	/**
	 * 按属性分页查找并排序(increase为true升序，false降序)
	 * 
	 * @param propertyName
	 * @param value
	 * @param increase
	 * @param orderpropertyName
	 * @param pageBean
	 * @return
	 */
	public Collection<T> findByPage(String propertyName, Object value,
			Boolean increase, String orderpropertyName, PageBean pageBean);

	/**
	 * 模糊搜索 like % _ %
	 * 
	 * @param propertyName
	 * @param value
	 * @param pageBean
	 * @param fuzzy
	 * @return
	 */
	public Collection<T> findByPage(String propertyName, Object value,
			PageBean pageBean, Boolean fuzzy);
}
